package cn.yunbamboos.mybatis.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 表主键标识
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TablePrimaryKey {

    /**
     * 字段名（该值可无）
     */
    String value() default "";

    /**
     * 中文名称
     */
    String cn() default "";

    /**
     * 数据长度
     */
    int length() default 0;

    /**
     * 数据类型
     */
    FieldType type() default FieldType.String;

    /**
     * 数字越小越靠前
     */
    int sort() default Integer.MAX_VALUE;

    /**
     * 字段验证策略之 where: 表示该字段在拼接where条件时的策略
     * <p>
     * ALWAYS: 直接拼接 column=#{column}
     * NOT_NULL: <if test="column != null">column=#{column}</if>
     * NOT_EMPTY: <if test="column != null and column!=''">column=#{column}</if>
     * NOT_EMPTY 如果针对的是非 CharSequence 类型的字段则效果等于 NOT_NULL
     * DEFAULT 不处理
     */
    FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;

}
